package cn.glutnn.controller;

import cn.glutnn.entity.AdminUser;
import cn.glutnn.entity.Result;
import cn.glutnn.service.AdminUserService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 管理员用户控制器
 * @author msh
 * @date 2025/04/04
 */
@RestController
@RequestMapping("/api/admin/users")
@Tag(name = "管理员用户管理", description = "管理员用户相关接口")
public class AdminUserController {
    
    @Autowired
    private AdminUserService adminUserService;
    
    /**
     * 分页查询管理员用户
     * @param current 当前页
     * @param size 每页数量
     * @param username 用户名(可选)
     * @param role 角色(可选)
     * @param status 状态(可选)
     * @return 分页结果
     */
    @GetMapping
    @Operation(summary = "分页查询管理员用户")
    public Result page(
            @Parameter(description = "当前页") @RequestParam(defaultValue = "1") Integer current,
            @Parameter(description = "每页数量") @RequestParam(defaultValue = "10") Integer size,
            @Parameter(description = "用户名") @RequestParam(required = false) String username,
            @Parameter(description = "角色") @RequestParam(required = false) String role,
            @Parameter(description = "状态") @RequestParam(required = false) Integer status
    ) {
        Page<AdminUser> page = new Page<>(current, size);
        return Result.success(adminUserService.page(page, username, role, status));
    }
    
    /**
     * 根据ID查询管理员用户
     * @param id 用户ID
     * @return 管理员用户
     */
    @GetMapping("/{id}")
    @Operation(summary = "根据ID查询管理员用户")
    public Result getById(@Parameter(description = "用户ID") @PathVariable Integer id) {
        return Result.success(adminUserService.getById(id));
    }
    
    /**
     * 创建管理员用户
     * @param adminUser 管理员用户
     * @return 创建结果
     */
    @PostMapping
    @Operation(summary = "创建管理员用户")
    public Result create(@RequestBody AdminUser adminUser) {
        return adminUserService.create(adminUser);
    }
    
    /**
     * 更新管理员用户
     * @param adminUser 管理员用户
     * @return 更新结果
     */
    @PutMapping
    @Operation(summary = "更新管理员用户")
    public Result update(@RequestBody AdminUser adminUser) {
        return adminUserService.update(adminUser);
    }
    
    /**
     * 删除管理员用户
     * @param id 用户ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除管理员用户")
    public Result delete(@Parameter(description = "用户ID") @PathVariable Integer id) {
        return adminUserService.delete(id);
    }
    
    /**
     * 更新管理员状态
     * @param id 用户ID
     * @param status 状态
     * @return 更新结果
     */
    @PutMapping("/{id}/status")
    @Operation(summary = "更新管理员状态")
    public Result updateStatus(
            @Parameter(description = "用户ID") @PathVariable Integer id,
            @Parameter(description = "状态") @RequestParam Integer status
    ) {
        return adminUserService.updateStatus(id, status);
    }
} 